翻訳と辞書
Words near each other
・ concupiscence
・ concupiscent
・ concur
・ concurrence
・ Concurrency and Coordination Runtime
・ concurrent
・ concurrent access
・ Concurrent Clean
・ concurrent flow drying
・ concurrent processing
・ Concurrent Prolog
・ concurrent treatment
・ concurrent use
・ Concurrent Versions System
・ ConcurrentClean
・ concurrently
・ concuss
・ concussio
・ concussio cerebri
・ concussio retinae


Dictionary Lists
翻訳と辞書 辞書検索 [ 開発暫定版 ]
スポンサード リンク

Concurrent Prolog : ウィキペディア日本語版
Concurrent Prolog

Concurrent Prologは、1983年に発表された並行論理プログラミング言語である。イスラエルWeizmann研究所のEhud Shapiroにより設計された〔Shapiro, E. ''A subset of Concurrent Prolog and its interpreter''〕。それ以前に開発されたRelational Languageをより単純化し、制限を緩めた言語で、その後の並行論理プログラミング言語に大きな影響を与えた〔Clark, K, L. and Gregory, S. ''PARLOG: a parallel logic programming language''〕〔Ueda, K. ''Guarded Horn Clauses''〕。また、並行論理プログラミングでの様々なプログラミング手法がConcurrent Prolog上で開発された。
== 概要 ==
Concurrent PrologはPrologから派生した並行プログラミングと並列実行のためのプログラミング言語で、論理変数を介して通信を行う複数の軽量プロセスのネットワークとしてプログラムを記述する。多くの並行プログラミング言語が逐次処理言語に並行実行の機能を追加したものであるのに対して、Concurrent Prologは並行実行が基本で、並行処理を素直に記述できる。
Concurrent Prologの派生言語として、組み込み述語のみをガード部に記述できるように制限してより単純化した Flat Concurrent Prolog(FCP)がある。1983年の発表以降、Shapiroにより様々なFCPのバリエーションが提案され、分析されている〔Shapiro, E. ''The Family of Concurrent Logic Programming Languages''〕。
Concurrent Prologではホーン節ガードを導入した以下のような規則(Clause)の集まりでプログラムを記述する。"|"はコミット演算子と呼ばれる。G はガード部、B はボディ部と呼ばれる。Head、G、Bはそれぞれ原子論理式である。ガード部の条件がない場合、ガード部とコミット演算子は省略できる。
Head :- G1, ..., Gn| B1, ..., Bm. (n,m≧0)
Headとガード部はプロセス書き換えのための条件、ボディ部は書き換え後のプロセスを表す。生成されたプロセスは全て並行に実行される。また、各プロセスごとの書き換え条件のチェックも複数の節で並行に実行してよく、コミット時にただ1つの節が選択される(コミッティッド・チョイス)。Prologと異なりバックトラックの機能はない。
プロセス間の通信にはプロセス間で共有する論理変数を使用する。多くの場合、プロセス間の通信には論理変数を含んだリストで表現されたストリームを用いる。ストリームは のようなリストで実現する。
論理変数を共有するプロセスの数に制限はないため、ストリーム通信は1対1だけではなく1対Nのブロードキャストなど、様々な形態が可能である。
簡単なプログラム例を以下に示す。2本のストリームをマージして1本のストリームにするプログラムで、Prologと同様、A や Xs など英大文字や"_"で始まる項は変数を表す。mergeの最初の2引数が入力ストリーム、最後が出力ストリームである。

merge(,Ys,) :- true | merge(Xs?,Ys,Zs).
merge(Xs,,) :- true | merge(Xs,Ys?,Zs).
merge(のようなリストの形になっていない場合は中断し、他のプロセスによりの形に具体化された(具体的に値が決まった)場合に実行を再開する。この時点でXs自体は具体化されていなくても構わないため、リストの先頭からインクリメンタルに具体化されるストリームを素直に処理できる。
また、ガードの実行(ヘッドとガード部の実行)で行われた変数への書き込みは、その後の失敗により変更される可能性があるため、どれか1つの節がコミットされるまで他のプロセスに公開されない。例えば、上記マージプログラムの最初の節での と2番目の節での とは値が異なる可能性がある。Concurrent Prologでは、ガード実行時に節ごとで変数の値が異なる多重環境を管理する必要があり、全ての節の並行実行を行う際に管理が複雑になる。

抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)
ウィキペディアで「Concurrent Prolog」の詳細全文を読む




スポンサード リンク
翻訳と辞書 : 翻訳のためのインターネットリソース

Copyright(C) kotoba.ne.jp 1997-2016. All Rights Reserved.